/*
 * Copyright (C) 2005-2008 Alfresco Software Limited.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

 * As a special exception to the terms and conditions of version 2.0 of 
 * the GPL, you may redistribute this Program in connection with Free/Libre 
 * and Open Source Software ("FLOSS") applications as described in Alfresco's 
 * FLOSS exception.  You should have received a copy of the text describing 
 * the FLOSS exception, and it is also available here: 
 * http://www.alfresco.com/legal/licensing"
 */

package org.alfresco.extension.avmversions;

import java.util.Date;


/**
 * Service that provides utility methods for purging AVM versions in a variety of useful ways.
 *
 * @author Peter Monks (peter.monks@alfresco.com)
 * @version $Id$
 */
public interface AVMPurgeVersionsService
{
    /**
     * Purges a single version from the given store.
     * 
     * @param avmStoreId The id of the AVM store to purge <i>(must not be null, empty or blank)</i>.
     * @param version    The version to purge <i>(must be > 0)</i>.
     */
    void purge(String avmStoreId, int version);
    
    
    /**
     * Purges all versions prior to but not including the given version from a given store.
     * Note: will not delete the latest version of the store, since that would wipe the Web Project.
     * 
     * @param avmStoreId The id of the AVM store to purge <i>(must not be null, empty or blank)</i>.
     * @param version    The oldest version to preserve <i>(must be > 0)</i>.
     * @return           The number of versions purged <i>(will be >= 0)</li>.
     */
    int purgeAllBefore(String avmStoreId, int version);
    
    
    /**
     * Purges all versions prior to but not including the given datetime from a given store. 
     * Note: will not delete the latest version of the store, since that would wipe the Web Project.
     * 
     * @param avmStoreId The id of the AVM store to purge <i>(must not be null, empty or blank)</i>.
     * @param timestamp  The timestamp of the oldest version to preserve <i>(must not be null)</i>. 
     * @return           The number of versions purged <i>(will be >= 0)</li>.
     */
    int purgeAllBefore(String avmStoreId, Date timestamp); 
}
